package v2;

import java.awt.Color;
import java.util.HashMap;
import java.util.Hashtable;

public enum TypeVegetal {

	
	// String nomEspece, int maxGraine, int rayonDispersion, int facteurPompage, int facteurGermination, int maxEau; int minEau; maxSante;int facteurPerteEau;Color Couleur; int gainSante; int dureeVie;private int factParcDefaut;
	POIS("Pois", 10, 10, 3, 10,100,10,100,10,Color.YELLOW, 10,50, 0,  "desert", "marecage", "tempere", 1, 1, 3),
    LUZERNE("Luzerne", 10, 10, 3, 10,100,10,100,10,Color.GREEN, 10,100, 0,  "desert", "marecage", "tempere", 1, 1, 3),
    ORCHIDE("Orchidé", 10, 5, 3, 10,100,10,100,10,Color.MAGENTA, 10,200, 0,  "desert", "marecage", "tempere", 1, 1, 3),
    PISSENLIT("Pissenlit", 10, 5, 3, 10,100,10,100,10,Color.YELLOW, 10,50, 0,  "desert", "marecage", "tempere", 1, 2, 3),
    ACACIA("Acacia", 30, 15, 5, 10,140,40,200,30,Color.WHITE, 40,300, 0,  "desert", "marecage", "tempere", 2, 1, 3),
    NENUPHARE("Nénuphare", 3, 3, 10, 7,200,100,75,30,Color.RED, 7, 50, 0,  "desert", "marecage", "tempere", 1, 3, 1),
    FRAMBOISIER("Framboisier", 5, 5, 2, 10,100,10,100,10,Color.PINK, 10,150, 0,  "desert", "marecage", "tempere", 2, 2, 3),
    CHOU("Chou", 10, 5, 3, 10,100,10,100,10,Color.BLUE, 10,50, 0,  "desert", "marecage", "tempere", 1, 1, 3),
    BLE("Blé", 20, 5, 3, 10,100,10,100,10,Color.BLACK, 10,50, 0,  "desert", "marecage", "tempere", 1, 1, 3),
    SAUGE("SAUGE", 10, 5, 3, 10,100,10,100,10,Color.RED, 10,50, 0,  "desert", "marecage", "tempere", 1, 1, 3);
	
	
	// AttributsS
	
    private final String nomEspece;
    
	/**
	 * La quantité maximum de grain que peut contenir le végétal
	 * @see Vegtetaux#Vegetaux(int,int,Position,int,int,int,int,Color,int,int,int,int,Hashtable,int)
	 */
	private int maxGraine;
	
	/**
	 * Le rayon de dispersion des graines de la plante
	 * @see Vegtetaux#Vegetaux(int,int,Position,int,int,int,int,Color,int,int,int,int,Hashtable,int)
	 */
	private int rayonDispersion;
	
	/**
	 * Le facteur de pompage de la plante pour qu'elle puisse extraire l'eau du sol
	 * @see Vegtetaux#Vegetaux(int,int,Position,int,int,int,int,Color,int,int,int,int,Hashtable,int)
	 */
	private int facteurPompage;
	
	/**
	 * Le facteur de germinattion des graines du végétal
	 * @see
	 */
	private int facteurGermination;
	
	/**
	 * La Quantité maximum d'eau que peut contenir l'animal.
	 * 
	 * @see 
	 */
	private int maxEau;

	/**
	 * La Quantité minimum d'eau que peut contenir l'animal.
	 * 
	 * @see 
	 */
	private int minEau;

	/**
	 * La Santé maximum de l'animal.
	 * 
	 * @see 
	 */
	private int maxSante;

	/**
	 * Le facteur de perte d'eau de l'animal.
	 * 
	 * @see 
	 */
	private int facteurPerteEau;

	/**
	 * La couleur de l'animal.
	 * 
	 * @see 
	 */
	private Color Couleur; // la couleur de l'entité

	/**
	 * La capacité de regénération de vie de l'animal.
	 * 
	 * @see
	 */
	private int gainSante;
	
	/** 
	 * La duree de vie de l'entité.
	 * 
	 * @see Entite#Entite(int,int,Position,int,int,int,int,Color,int,int)
	 */
	private int dureeVie;
	
	private int factParcDefaut;
	
	/**
	 * Les type de parcelle favorite du végétal
	 * NB: de facon totalement arbitraire, nous avon attribuer la valeur minimale de 1 et la 
	 * valeur maximale de 10 à l'integer dans la Hashtable...
	 * 
	 * @see
	 */
	private HashMap<String, Integer> mesParcFav;
	
	// Constructeurs

	// Constructeur par defaut
	// TODO: generer javadoc
	TypeVegetal(String nomEspece, int maxGraine, int rayonDispersion, int facteurPompage, int facteurGermination, int maxEau, int minEau, int maxSante, int facteurPerteEau, Color Couleur, int gainSante, int dureeVie, int factParcDefaut)
	{
		// Attributs de Vegetaux
		this.nomEspece = nomEspece;
		this.maxGraine = maxGraine;
		this.rayonDispersion = rayonDispersion;
		this.facteurPompage = facteurPompage;
		this.facteurGermination = facteurGermination;
		this.factParcDefaut = factParcDefaut;
		
		// Attributs de Entite
		this.maxEau = maxEau;
		this.minEau = minEau;
		this.maxSante = maxSante;
		this.facteurPerteEau = facteurPerteEau;
		this.Couleur = Couleur;
		this.gainSante = gainSante;
		this.dureeVie = dureeVie;
		
		mesParcFav = new  HashMap<String, Integer>();
	}
	
	// Constructeur 1 parcelle
	//TODO: javadoc
	TypeVegetal(String nomEspece, int maxGraine, int rayonDispersion, int facteurPompage, int facteurGermination, int maxEau, int minEau, int maxSante, int facteurPerteEau, Color Couleur, int gainSante, int dureeVie, int factParcDefaut, String parcFav1, int facParc1)
	{
		this( nomEspece,  maxGraine,  rayonDispersion,  facteurPompage,  facteurGermination,  maxEau,  minEau,  maxSante,  facteurPerteEau,  Couleur, gainSante, dureeVie, factParcDefaut);
		
		if (! parcFav1.equalsIgnoreCase(""))
		{
			mesParcFav.put(parcFav1, facParc1);
		}
	}
	
	//Constructeur 2 parcelles
	//TODO: javadoc
	TypeVegetal(String nomEspece, int maxGraine, int rayonDispersion, int facteurPompage, int facteurGermination, int maxEau, int minEau, int maxSante, int facteurPerteEau, Color Couleur, int gainSante, int dureeVie, int factParcDefaut, String parcFav1, String parcFav2, int facParc1,int facParc2)
	{
		this( nomEspece,  maxGraine,  rayonDispersion,  facteurPompage,  facteurGermination,  maxEau,  minEau,  maxSante,  facteurPerteEau,  Couleur, gainSante, dureeVie, factParcDefaut,parcFav1, facParc1);
		
		if (! parcFav2.equalsIgnoreCase(""))
		{
			mesParcFav.put(parcFav2, facParc2);
		}
	}

	//Constructeur 3 parcelles
	//TODO: javadoc
	TypeVegetal(String nomEspece, int maxGraine, int rayonDispersion, int facteurPompage, int facteurGermination, int maxEau, int minEau, int maxSante, int facteurPerteEau, Color Couleur, int gainSante, int dureeVie, int factParcDefaut, String parcFav1, String parcFav2,String parcFav3, int facParc1,int facParc2,int facParc3)
	{

		this( nomEspece,  maxGraine,  rayonDispersion,  facteurPompage,  facteurGermination,  maxEau,  minEau,  maxSante,  facteurPerteEau,  Couleur, gainSante, dureeVie, factParcDefaut,parcFav1,parcFav2, facParc1,facParc2);

		if (! parcFav3.equalsIgnoreCase(""))
		{
			mesParcFav.put(parcFav3, facParc3);
		}

	}
	//Getters

	/**
	 * @return the nomEspece
	 */
	public String nomEspece() {
		return nomEspece;
	}

	/**
	 * @return the maxGraine
	 */
	public int maxGraine() {
		return maxGraine;
	}

	/**
	 * @return the rayonDispersion
	 */
	public int rayonDispersion() {
		return rayonDispersion;
	}

	/**
	 * @return the facteurPompage
	 */
	public int facteurPompage() {
		return facteurPompage;
	}

	/**
	 * @return the facteurGermination
	 */
	public int facteurGermination() {
		return facteurGermination;
	}

	/**
	 * @return the maxEau
	 */
	public int maxEau() {
		return maxEau;
	}

	/**
	 * @return the minEau
	 */
	public int minEau() {
		return minEau;
	}

	/**
	 * @return the maxSante
	 */
	public int maxSante() {
		return maxSante;
	}

	/**
	 * @return the facteurPerteEau
	 */
	public int facteurPerteEau() {
		return facteurPerteEau;
	}

	/**
	 * @return the couleur
	 */
	public Color Couleur() {
		return Couleur;
	}

	/**
	 * @return the gainSante
	 */
	public int gainSante() {
		return gainSante;
	}

	/**
	 * @return the dureeVie
	 */
	public int dureeVie() {
		return dureeVie;
	}

	/**
	 * @return the factParcDefaut
	 */
	public int factParcDefaut() {
		return factParcDefaut;
	}

	/**
	 * @return the mesParcFav
	 */
	public HashMap<String, Integer> mesParcFav() {
		return mesParcFav;
	}
	

	/**
	 * Méthode qui permet de représenter l'espèce végétale sous forme 
	 * de chaine de caractères
	 */
	public String toString()
	{
		String myString = new String("");
		
		myString+=" nomEspece: "+this.nomEspece;
		
		return myString;
	}
	
}
